package com.root.edu.realtime.util;

import com.alibaba.druid.pool.DruidDataSource;
import com.root.edu.realtime.common.GmallConfig;

public class DruidDSUtil {
    private static DruidDataSource druidDataSource;

    public static DruidDataSource createDataSource() {
        if (druidDataSource == null){
            synchronized (DruidDSUtil.class){
                if (druidDataSource ==null){
                    System.out.println ("~~~获取Druid连接池对象~~~");
                    //创建连接池
                     druidDataSource = new DruidDataSource ();
                     //设置驱动名
                    druidDataSource.setDriverClassName ( GmallConfig.PHOENIX_DRIVER );
                    //设置URL
                    druidDataSource.setUrl ( GmallConfig.PHOENIX_URL );
                    //设置初始化连接池是池中连接的数量
                    druidDataSource.setInitialSize ( 5 );
                    //设置同时活跃的最大连接数
                    druidDataSource.setMaxActive ( 20 );
                    //设置空闲时的最小连接数，必须介于0和最大连接数之间，默认为0
                    druidDataSource.setMinIdle ( 5 );
                    //设置没有空余连接时的等待时间，超时抛出异常，-1表示一直等待
                    druidDataSource.setMaxWait ( -1 );
                    //验证连接是否可用使用的SQL语句
                    druidDataSource.setValidationQuery ( "select 1" );
                    // 指明连接是否被空闲连接回收器（如果有）进行检验，如果检测失败，则连接将被从池中去除
                    // 注意，默认值为 true，如果没有设置 validationQuery，则报错
                    // testWhileIdle is true, validationQuery not set
                    druidDataSource.setTestWhileIdle ( true );
                    //借用连接时，是否测试，设置为false，不测试，否则很影响性能
                    druidDataSource.setTestOnBorrow ( false );
                    //归还连接时，是否测试
                    druidDataSource.setTestOnReturn(false);
                    //设置空闲时间连接回收器每个30s运行一次
                    druidDataSource.setTimeBetweenEvictionRunsMillis(30*1000l);
                    // 设置池中连接空闲 30min 被回收，默认值即为 30 min
                    druidDataSource.setMinEvictableIdleTimeMillis ( 30*60*1000L );


                }
            }
        }
    return druidDataSource;
    }
}
